      SUBROUTINE  CEIGEN(A,R,N,MV)                                      00010000
CCC       EIGENVALUES AND EIGENVECTORS OF A TRIDIAGONAL, SYMMETRIC      00020000
CCC       MATRIX IN THE INCREASING ORDER                                00030000
CCC       COMPLEX MATRIX                                                00040000
CCC       ------------------- COPIED FROM IBM LIBRARY ---------------
      IMPLICIT COMPLEX *16 (A-H,O-Z)                                    00050000
      REAL*8 RANGE                                                      00060000
      DIMENSION A(1),R(1)                                               00070000
C                                                                       00080000
      RANGE=1.0D-12                                                     00090000
      IF(MV-1) 10,25,10                                                 00100000
   10 IQ=-N                                                             00110000
      DO 20 J=1,N                                                       00120000
      IQ=IQ+N                                                           00130000
      DO 20 I=1,N                                                       00140000
      IJ=IQ+I                                                           00150000
      R(IJ)=(0.D0,0.D0)                                                 00160000
      IF(I-J) 20,15,20                                                  00170000
   15 R(IJ)=(1.D0,0.D0)                                                 00180000
   20 CONTINUE                                                          00190000
   25 ANORM=(0.D0,0.D0)                                                 00200000
      DO 35 I=1,N                                                       00210000
      DO 35 J=I,N                                                       00220000
      IF(I-J) 30,35,30                                                  00230000
   30 IA=I+(J*J-J)/2                                                    00240000
      ANORM=ANORM+A(IA)*A(IA)                                           00250000
   35 CONTINUE                                                          00260000
      IF (DREAL(ANORM)) 165,165,40                                      00270000
   40 ANORM=1.41421356D0*CDSQRT(ANORM)                                  00280000
      ANRMX=ANORM*RANGE/DFLOAT(N)                                       00290000
      IND=0                                                             00300000
      THR=ANORM                                                         00310000
   45 THR=THR/DFLOAT(N)                                                 00320000
   50 L=1                                                               00330000
   55 M=L+1                                                             00340000
   60 MQ=(M*M-M)/2                                                      00350000
      LQ=(L*L-L)/2                                                      00360000
      LM=L+MQ                                                           00370000
      IF (DREAL(CDABS(A(LM))-THR)) 130,65,65                            00380000
   65 IND=1                                                             00390000
      LL=L+LQ                                                           00400000
      MM=M+MQ                                                           00410000
      X=0.5*(A(LL)-A(MM))                                               00420000
      Y=-A(LM)/CDSQRT(A(LM) *A(LM)+X*X)                                 00430000
      IF (DREAL(X)) 70,75,75                                            00440000
   70 Y=-Y                                                              00450000
   75 SINX=Y/CDSQRT(2.*(1.0+(CDSQRT(1.0-Y*Y))))                         00460000
      SINX2=SINX*SINX                                                   00470000
      COSX=CDSQRT(1.0-SINX2)                                            00480000
      COSX2=COSX*COSX                                                   00490000
      SINCS =SINX*COSX                                                  00500000
      ILQ=N*(L-1)                                                       00510000
      IMQ=N*(M-1)                                                       00520000
      DO 125 I=1,N                                                      00530000
      IQ=(I*I-I)/2                                                      00540000
      IF(I-L) 80,115,80                                                 00550000
   80 IF(I-M) 85,115,90                                                 00560000
   85 IM=I+MQ                                                           00570000
      GO TO 95                                                          00580000
   90 IM=M+IQ                                                           00590000
   95 IF(I-L) 100,105,105                                               00600000
  100 IL=I+LQ                                                           00610000
      GO TO 110                                                         00620000
  105 IL=L+IQ                                                           00630000
  110 X=A(IL)*COSX-A(IM)*SINX                                           00640000
      A(IM)=A(IL)*SINX+A(IM)*COSX                                       00650000
      A(IL)=X                                                           00660000
  115 IF(MV-1) 120,125,120                                              00670000
  120 ILR=ILQ+I                                                         00680000
      IMR=IMQ+I                                                         00690000
      X=R(ILR)*COSX-R(IMR)*SINX                                         00700000
      R(IMR)=R(ILR)*SINX+R(IMR)*COSX                                    00710000
      R(ILR)=X                                                          00720000
  125 CONTINUE                                                          00730000
      X=2.0*A(LM)*SINCS                                                 00740000
      Y=A(LL)*COSX2+A(MM)*SINX2-X                                       00750000
      X=A(LL)*SINX2+A(MM)*COSX2+X                                       00760000
      A(LM)=(A(LL)-A(MM))*SINCS+A(LM)*(COSX2-SINX2)                     00770000
      A(LL)=Y                                                           00780000
      A(MM)=X                                                           00790000
  130 IF(M-N) 135,140,135                                               00800000
  135 M=M+1                                                             00810000
      GO TO 60                                                          00820000
  140 IF(L-(N-1)) 145,150,145                                           00830000
  145 L=L+1                                                             00840000
      GO TO 55                                                          00850000
  150 IF(IND-1) 160,155,160                                             00860000
  155 IND=0                                                             00870000
      GO TO 50                                                          00880000
  160 IF (DREAL(THR-ANRMX)) 165,165,45                                  00890000
  165 IQ=-N                                                             00900000
      DO 185 I=1,N                                                      00910000
      IQ=IQ+N                                                           00920000
      LL=I+(I*I-I)/2                                                    00930000
      JQ=N*(I-2)                                                        00940000
      DO 185 J=I,N                                                      00950000
      JQ=JQ+N                                                           00960000
      MM=J+(J*J-J)/2                                                    00970000
      IF (DREAL(A(LL)-A(MM))) 170,185,185                               00980000
  170 X=A(LL)                                                           00990000
      A(LL)=A(MM)                                                       01000000
      A(MM)=X                                                           01010000
      IF(MV-1) 175,185,175                                              01020000
  175 DO 180 K=1,N                                                      01030000
      ILR=IQ+K                                                          01040000
      IMR=JQ+K                                                          01050000
      X=R(ILR)                                                          01060000
      R(ILR)=R(IMR)                                                     01070000
  180 R(IMR)=X                                                          01080000
  185 CONTINUE                                                          01090000
      RETURN                                                            01100000
      END                                                               01110000
